package _03oop

import _03oop.Person

/*
面向对象测试
 */

//无需提供构造方法直接赋值
def person = new Person(name: 'fauks', age: 26)
println person.name//groovy.操作符不是直接操作属性而是调用Get方法不同于java直接操作属性，次方法来源于GroovyObject
person.say("hello groovy")

person.eay()

//metaClass
//为类动态添加属性(如果不加任何操作则仅对当前脚本生效)需要在实例化之前注入
Person.metaClass.sex = 'male'
Person.metaClass.uppername = { -> name.toUpperCase() }
//注入静态方法，参数为name、age
Person.metaClass.static.newMyInstence = { String name, int age ->
    new Person(name: name, age: age)
}
def p2 = new Person(name: 'bob', age: 12)
println p2.sex
//为类动态添加方法
println p2.uppername()

println Person.newMyInstence("slx", 100)